page.tsx 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. 'use client';
  2. import { useEffect } from 'react';
  3. import { useParams, useRouter } from 'next/navigation';
  4. import Logo from '@/app/component/Logo';
  5. import useAuth from '@/hooks/useAuth';
  6. import { isSocialLoginProvider, SOCIAL_PROVIDER_LABELS } from '@/constants/social';
  7. /**
  8. * 소셜 로그인 완료 페이지 (Naver/Kakao) — /login/{provider}/complete
  9. * 콜백 라우트가 httpOnly 쿠키(accessToken/refreshToken)를 심은 뒤 도착.
  10. * 기존 /login/google/complete 와 동일하게 login() 으로 프로필 조회 + 메인 이동.
  11. */
  12. export default function Page()
  13. {
  14. const { login } = useAuth();
  15. const router = useRouter();
  16. const params = useParams<{ provider: string }>();
  17. const label = isSocialLoginProvider(params.provider) ? SOCIAL_PROVIDER_LABELS[params.provider] : null;
  18. useEffect(() => {
  19. if (!label) {
  20. router.replace('/login');
  21. return;
  22. }
  23. login(true);
  24. // eslint-disable-next-line react-hooks/exhaustive-deps
  25. }, []);
  26. return (
  27. <div className="fixed inset-0 flex flex-col items-center justify-center gap-6 bg-[var(--bg-page)] z-50">
  28. <span className="auth-logo inline-block">
  29. <Logo size="lg" />
  30. </span>
  31. <div className="w-7 h-7 border-[3px] border-gray-200 border-t-[var(--color-accent)] rounded-full animate-spin" />
  32. <p className="text-sm text-[var(--text-muted)]">{label ?? '소셜'} 로그인 중...</p>
  33. </div>
  34. );
  35. }